<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 1.利用对象字面量创建对象 {}
        var obj = {
            username: '张三疯',
            age: 18,
            sex: '男',
            sayHi: function() {
                console.log('hi~');
            }
        }
        // (1)里面的属性或方法用键值对的形式 键 属性名 ： 值 属性值
        // (2)多个属性或方法中间用逗号隔开的
        // (3)方法冒号后面是一个匿名函数
        // 2.使用对象
        // (1)调用对象的属性 我们采用 对象名.属性名
        console.log(obj.username);
        // (2)对象名['属性名']
        console.log(obj['age']);
        // 调用对象的方法 对象名.方法名()
        obj.sayHi();
        var dog = {
            name: '可可',
            type: '阿拉斯加犬',
            age: 5,
            color: '棕红色',
            skill: function() {
                console.log('bark');
                console.log('showfilm');
            }
        }
        dog.skill();
        // 3.利用 newObject 创建对象
        var obj2 = new Object();
        obj2.name = '张三丰';
        obj2.age = 89;
        obj2.sayHi = function() {
            console.log('hi~');
        }
        // 利用等号 = 赋值的方法 添加对象的属性和方法
        console.log(obj2.name);
        obj2.sayHi();
        var mingRen = new Object();
        mingRen.name = '鸣人';
        mingRen.age = 19;
        mingRen.sex = 'male';
        mingRen.skill = function() {
            console.log('影分身');
        }
        mingRen.skill();
        // 3.new 构造函数名();
        function Star(name, age, sex) {
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.sing = function(sang) {
                console.log(sang);
            }
        }
        var ldh = new Star('刘德华',18,'男');
        console.log(ldh.name);
        ldh.sing('冰雨');
        // 构造函数首字母要大写
        // 不需要return就可以返回结果
        // 我们调用构造函数 必须要使用new
        // 我们的属性和方法前必须要加this
        function Hero(name,type,blood,attack) {
            this.name = name;
            this.type = type;
            this.blood = blood;
            this.attack = function (skill){
                console.log(skill);
            }
        }
        var lianpo = new Hero('廉颇','力量型',500);
        var houyi = new Hero('后羿','速度型',400);
        lianpo.attack('近战');
        console.log(lianpo);
        // new关键字执行过程
        // 1.new构造函数在内存中创建一个空的对象
        // 2.this指向刚才创建的空对象
        // 3.执行构造函数里面的代码，给这个空对象添加方法和属性
        // 4.返回这个对象
        for (var k in lianpo) {
            console.log(k);
            console.log(lianpo[k]);
        }
        function reverse(a) {
            for(var i = 0; i < a.length/2; i++) {
                var temp = a[a.length - i - 1];
                a[a.length - i -1] = a[i];
                a[i] = temp;
            }
        }
        function sort(a) {
            for(var i = 0; i < a.length-1; i++) {
                for(var j = 0; j <= a.length-i-1; j++) {
                    if(a[j]>a[j+1])
                    {
                        var temp = a[j];
                        a[j] = a[j+1];
                        a[j+1] = temp;
                    }
                }
            }
        }
        var a = [2,5,3,4];
        reverse(a);
        console.log(a);
        sort(a);
        console.log(a);
    </script>
<body>
    
</body>
</html>